"""
定义了项目所使用的 SQLAlchemy ORM 模型。

每个类代表数据库中的一张表。
"""
from sqlalchemy import Column, String, Text, DateTime, func
from sqlalchemy.dialects.postgresql import UUID, JSONB
from sqlalchemy.ext.declarative import declarative_base
import uuid

# 所有 ORM 模型的基础类
Base = declarative_base()

class Tool(Base):
    """
    代表 `tools` 数据库表的 ORM 模型。
    
    这张表存储了所有通过 MCP Management API 管理的工具的配置信息。
    """
    __tablename__ = "tools"

    # 字段定义
    id = Column(UUID(as_uuid=True), primary_key=True, default=uuid.uuid4, comment="工具的唯一标识符 (UUID)")
    name = Column(String(255), nullable=False, comment="工具的名称")
    description = Column(Text, comment="工具的详细描述")
    target_api_url = Column(String(2048), nullable=False, comment="工具背后真实 API 的基础 URL")
    openapi_spec_content = Column(Text, nullable=False, comment="工具的 OpenAPI 规范 (YAML/JSON 格式的字符串)")
    authentication_headers = Column(JSONB, comment="调用此工具所需的认证头，以 JSON 格式存储")
    filter_dsl = Column(Text, comment="用于过滤或转换工具输出的特定领域语言 (DSL)")
    # 添加MCP技术名称映射字段
    mcp_tool_names = Column(JSONB, comment="存储该工具生成的所有MCP技术名称映射，格式: {\"endpoint_key\": \"mcp_technical_name\"}，用于确保重启后名称一致性")
    created_at = Column(DateTime(timezone=True), server_default=func.now(), comment="记录创建时间")
    updated_at = Column(DateTime(timezone=True), onupdate=func.now(), server_default=func.now(), comment="记录最后更新时间")